package com.dlc.shop.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dlc.shop.bean.dto.AllotOrderDTO;
import com.dlc.shop.bean.model.AllotOrder;
import com.dlc.shop.bean.vo.AllotOrderVO;
import com.dlc.shop.bean.vo.AllotSpuImportVO;
import com.dlc.shop.bean.vo.AllotSpuInboundImportVO;
import com.dlc.shop.common.util.PageParam;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * @author gaozijie
 * @since 023-11-20
 */
public interface AllotOrderService extends IService<AllotOrder> {

    /**
     * 分页查询调拨订单
     * @param pageParam 分页参数
     * @param allotOrderDTO 调拨订单DTO
     * @return 调拨订单VO分页对象
     */
    Page<AllotOrderVO> pageAllotOrder(PageParam<AllotOrderVO> pageParam, AllotOrderDTO allotOrderDTO);

    /**
     * 获取调拨订单集合
     * @param allotOrderDTO 调拨订单dto
     * @return 调拨订单集合
     */
    List<AllotOrderVO> listAllotOrder(AllotOrderDTO allotOrderDTO);

    /**
     * 获取调拨订单详情
     * @param allotOrderDTO 调拨订单dto
     * @return 调拨订单详情
     */
    AllotOrderVO getAllotOrder(AllotOrderDTO allotOrderDTO);

    /**
     * 新增调拨订单
     * @param allotOrderDTO 调拨订单dto
     */
    void addAllotOrder(AllotOrderDTO allotOrderDTO);

    /**
     * 更新调拨订单
     * @param allotOrderDTO 调拨订单dto
     */
    void updateAllotOrder(AllotOrderDTO allotOrderDTO);

    /**
     * 调拨商品入库
     * @param allotOrderDTO 调拨订单dto
     */
    void inbound(AllotOrderDTO allotOrderDTO);

    /**
     * 完成调拨订单
     * @param allotOrderDTO 调拨订单dto
     */
    void completeOrder(AllotOrderDTO allotOrderDTO);

    /**
     * 作废调拨订单
     * @param allotOrderDTO 调拨订单dto
     */
    void nullifyOrder(AllotOrderDTO allotOrderDTO);

    /**
     * 作废调拨订单（通过仓库Id）
     * @param warehouseId 仓库id
     */
    void nullifyOrderByWarehouseId(Long warehouseId);

    /**
     * 下载商品导入模板
     * @param response 响应
     */
    void downloadModel(HttpServletResponse response);

    /**
     * 解析excel文件
     * @param excelFile excel文件
     * @param allotOrderDTO 调拨订单dto
     * @return excel解析后数据
     */
    AllotSpuImportVO parseFile(MultipartFile excelFile, AllotOrderDTO allotOrderDTO);

    /**
     * 下载商品入库导入模板
     * @param response 响应
     * @param allotOrderDTO 调拨订单dto
     */
    void downloadInboundModel(HttpServletResponse response, AllotOrderDTO allotOrderDTO);

    /**
     * 解析入库excel文件
     * @param excelFile excel文件
     * @param allotOrderDTO 调拨订单dto
     * @return excel解析后的数据
     */
    AllotSpuInboundImportVO parseInboundFile(MultipartFile excelFile, AllotOrderDTO allotOrderDTO);

    /**
     * 统计未完成的调拨订单数量
     * @param warehouseId 仓库id
     * @return 未完成数
     */
    Long countUnFinish(Long warehouseId);
}
